/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.ecommerce.entity.impl;
import br.com.ecommerce.entity.IEntity;
import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;

/**
 *
 * @author rpateixeira
 */
@Entity
@Table(name="CATEGORIAS")
public class Categoria implements IEntity,Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @SequenceGenerator(name = "CATEGORIA_GENERATOR", sequenceName = "public.categoriaSequence", initialValue = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="CATEGORIA_GENERATOR")
    @Column(name="SEQ_CATEGORIA")
    private Long id;
    @NotNull
    @NotEmpty
    @Column(nullable=false,name="NOME_PRODUTO",unique=true)
    private String nome;
    @OneToMany(cascade=CascadeType.ALL,mappedBy="categoria",orphanRemoval=true)
    private List<Produto> produtos;
    @Column
    private boolean active= true;

    
    @Override
    public Long getId() {
        return this.id;
    }
    
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
    
    public List<Produto> getProdutos() {
        if(produtos==null){
            produtos= new LinkedList<Produto>();
        }
        return produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }

    public boolean isActive() {
        return active;
    }

    public void setActive(boolean active) {
        this.active = active;
    }

    public void addProduto(Produto produto){
        produto.setCategoria(this);
        getProdutos().add(produto);
    }
}
